iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0
DevOps

60天從零開始學DevSecOps系列 第 5

Day 5 - 程式會動就不要改 ? 現在還適用嗎,Sec到底用在哪裡?

  • 分享至 

  • xImage
  •  

以前常常講,程式會動,就不要改
https://ithelp.ithome.com.tw/upload/images/20250818/20171891ZcLll9498X.jpg

現今為追求安全,延伸為
「程式會動不代表安全。讓它邊跑、邊挑出風險。」

講到Day4 好像都還沒講到Sec,不知道的以為主題是DevOps

蠻常聽到別人講安全性測試,但到底是甚麼呢?

想像一下昨天把 index.html 跑起來,畫面正常、按鈕會動——這叫功能測試通過。但安全性測試要問的是:這頁面在惡意輸入、壞連結、舊套件、外洩金鑰的情況下,還安全嗎?
簡單講:能不能用用起來不會被打爆

安全性測試會多做這些事(拿 index.html 當例子):

  • SAST:掃原始碼,有沒有像 innerHTML 直接塞使用者輸入、eval() 之類的地雷。
  • SCA:看你用的前端套件有沒有已知漏洞 & License 風險。
  • Secret Scan:檢查 repo 裡有沒有把 API Key、Token 一起推上去。
  • DAST:實際對頁面丟像 <img src=x onerror=alert(1)> 的惡意輸入,驗證會不會被 XSS。
  • (若要上線)IaC / Container:部署設定是否開太大、容器基底有沒有洞。

蝦~為啥出現這麼多專有名詞,開始偏資安了XDD

一句話總結:安全性測試是在「程式看起來能跑」之外,找出「攻擊者能從哪裡進來」
接下來我們就把這些檢查接進 CI,讓每次 PR 自動幫你守門。


SAST / SCA / Secret / IaC / Container / DAST 一次看懂

1) 六大掃描類型

SAST(靜態程式碼掃描)— 不跑程式,讀碼找地雷

  • 看什麼:原始碼、AST/CFG、資料流與污點追蹤(taint)。
  • 能抓:XSS、SQL/Command Injection、不安全反序列化、弱加密、錯誤驗證/授權流程、危險 API(如 evalinnerHTML)。
  • 抓不到/較難:只在執行時才出現的環境差異、第三方服務互動、實際路由/重導向行為。
  • 何時跑:本機 IDE 快掃、PR/CI(建議掃 diff),夜間全量。
  • 代表工具Semgrep、CodeQL(多語言,規則/查詢庫成熟)。(semgrep.dev, codeql.github.com)
  • 為什麼 CI/CD 需要它:程式一提交就能提早抓 bug,避免進到 build 才爆炸,修復成本最低。

SCA(軟體成分分析)— 你的依賴安全嗎?

  • 看什麼:lockfile、package.json/requirements.txt、Maven/Gradle、Go modules;也能依 SBOM 掃。
  • 能抓:已知漏洞(CVE/KEV)、License 風險、惡意套件。
  • 抓不到/較難自家程式碼邏輯的錯、0-day(尚未建檔)。
  • 何時跑:PR/CI;夜間對主分支出 SBOM 與報表。
  • 代表工具Trivy(也會出 SBOM、可掃檔案/映像/IaC)。(GitHub, trivy.dev)
  • 為什麼 CI/CD 需要它:每次 PR 或 build 就能自動檢查依賴是否有新 CVE,避免把有漏洞的套件部署上線。

Secret Scanning(憑證外洩掃描)— 別把金鑰推上去

  • 看什麼:repo 目前內容+(建議)git 歷史;以模式 + 熵值找 API Key、Token、私鑰。
  • 能抓:雲端金鑰、OAuth token、Webhook 簽章、SSH 私鑰。
  • 抓不到/較難:被環境變數正確注入、未落地到 repo 的 secrets。
  • 何時跑:pre-commit(本機擋第一層)、PR/CI(擋第二層)、主分支排程(補歷史)。
  • 代表工具Gitleaks、GitHub Secret Scanning。(GitHub, GitHub Docs)
  • 為什麼 CI/CD 需要它 :能在合併前就擋掉 API Key 外洩,避免敏感金鑰一進 repo 就被歷史記錄「永久保存」。

講到這個可以上網找找看用google hacking的方式,說不定能找到gpt的secret token?
(我只是提供這個想法:D


IaC 掃描(基礎設施設定)— 別用錯設定把門敞開

  • 看什麼:Terraform、Kubernetes YAML、Helm、CloudFormation、Dockerfile 等宣告式設定。
  • 能抓0.0.0.0/0:22、S3/Blob 公開、過度權限、未加密、K8s 不安全能力(privileged 等)。
  • 抓不到/較難執行期漂移(drift)、動態產生的資源。
  • 何時跑:PR/CI(在 plan 前先掃),合併前當硬門檻。
  • 代表工具Trivy Misconfig、Checkov。(trivy.dev, checkov.io)
  • 為什麼 CI/CD 需要它 :基礎設施設定在 apply 前就被擋,避免錯誤設定(例如全開防火牆)直接佈署到雲端。

Container Image 掃描— 把映像剖開看漏洞

  • 看什麼:映像層(layers)、OS 套件(apk/apt/rpm)、語言套件、二進位指紋。
  • 能抓:基底鏡像漏洞(OS + libs)、應用相依漏洞、過時工具。
  • 抓不到/較難:程式邏輯錯誤、執行時才會觸發的弱點。
  • 何時跑Build 後立刻掃;進 Registry 時擋高危,Admission 政策只允許已簽章 + 無 CRITICAL 的映像進群集。
  • 代表工具Grype、Trivy。(GitHub, Chainguard Academy)
  • 為什麼 CI/CD 需要它 :在 build 完映像後立即掃描,確保進 Registry 的都是乾淨、安全的映像,不讓漏洞鏡像進入部署環境。

DAST(動態應用掃描)— 真的跑起來,真的打

  • 看什麼啟動後的網站/服務對外行為(HTTP/WS 等)。
  • 能抓:XSS、SQLi、弱驗證、敏感資訊曝露、HTTP 安全旗標錯誤、錯誤處理外洩。
  • 抓不到/較難沒跑起來完全掃不到(正是你說的 exe/服務未啟動的情況);對深層業務邏輯(需要多步態狀/登入流程)可能需要更進階的設定或 IAST。
  • 何時跑:Staging/測試站的 baseline(快速、不破站)每日排程;重大釋出前跑 full scan
  • 代表工具OWASP ZAP、Burp Suite(Baseline/Full 模式)。(owasp.org, ZAP,Dast tools)
  • 為什麼 CI/CD 需要它 :能在 Staging 或 pre-release 階段模擬攻擊,確保釋出前不會因常見漏洞(XSS/SQLi)被打爆。

說真的有沒有人覺得假日比較難產出?



上一篇
Day 4 -超級英雄的隊友:啟動 GitHub Actions 自動化冒險
下一篇
Day 6 - 網頁還沒跑,就被 SAST 抓包了
系列文
60天從零開始學DevSecOps8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言